package com.sse.conexion;

import java.sql.Connection;
import java.sql.SQLException;

import com.jolbox.bonecp.BoneCP;
import com.jolbox.bonecp.BoneCPConfig;
import com.sse.util.LectorProperties;

/**
 * Clase que maneja la conexion a la BD.
 */
public class ConectorBD {
	
	/** Instancia del pool de conexiones. */
	private static final BoneCP connectionPool;

//	private Connection con;	
	
	
	static {
		// Bloque de inicializacion estatica
		String driver = LectorProperties.leerPropiedad("DriverBD");
		String fuente = LectorProperties.leerPropiedad("FuenteBD");
		String usuario = LectorProperties.leerPropiedad("UsuarioBD");
		String clave = LectorProperties.leerPropiedad("PasswordBD");
		try {
			Class.forName(driver).newInstance();
		} catch (Exception e) {
			throw new Error(e.getMessage());			
		} 
			
	 	BoneCPConfig config = new BoneCPConfig();	// create a new configuration object
	 	
	 	config.setJdbcUrl(fuente);	// set the JDBC url
		config.setUsername(usuario);			// set the username
		config.setPassword(clave);				// set the password
		
		
		
		config.setIdleConnectionTestPeriodInSeconds(120);
		config.setIdleMaxAgeInMinutes(5);		
		config.setMinConnectionsPerPartition(10);
		config.setMaxConnectionsPerPartition(50);
		config.setPartitionCount(3);
		config.setReleaseHelperThreads(3);
		config.setStatementsCacheSize(100);
		config.setAcquireIncrement(5);
		
				
		try {
			connectionPool = new BoneCP(config);
		} catch (SQLException e) {
			throw new Error("Error al inicializar la BD: "+fuente+" - Usuario: "+usuario+ " Ex: "+e.getMessage());			
		}	
	}
	
	

	/*
	 * Metodo que genera una conexion a la bd
	 */
	public static Connection getConexion() throws Exception {			
		Connection c = connectionPool.getConnection();
		return c;		
	}
	
	
	/**
	 * Cierra el pool de conexiones.
	 */
	public void cerrarPool(){
		connectionPool.close();		
	}
	
	
//	public Connection getCon() throws Exception {
//		if (con == null)
//			con = getConexion();
//		return con;
//	}
	
//	public static void main(String[] args) throws Exception {
//		
//		Connection c = ConectorBD.getConexion();
//		
//		for (int i = 0; i < 100; i++) {
//			System.out.println("Conexion obtenida: "+c.toString());				
//		}	
//	}

}
